package org.zjx.command.service;

import org.zjx.command.entity.SlotItem;
import org.zjx.prop.domain.enums.SlotType;
import org.zjx.prop.domain.model.ItemInstance;
import org.zjx.prop.domain.model.ItemSlot;
import org.zjx.prop.domain.model.ItemTemplate;

import java.awt.image.BufferedImage;
import java.util.List;
import java.util.Map;
import java.util.Optional;

public interface PropService {
    //单个道具图片 匹配道具模板
    Optional<ItemTemplate> matcher(BufferedImage image);

    //批量图片匹配模板
    List<ItemTemplate> matcher(List<BufferedImage> bufferedImages);

    //获取玩家指定道具模板实例
    List<ItemSlot> findItem(String playerId, int itemTemplateId, Map<String, Object> attributes);

    /**
     * 获取玩家指定栏中所有道具实例
     */
    List<ItemInstance> getPlayerItemsBySlotType(String playerId, SlotType slotType);


    //判断是否有指定道具
    boolean haveInstances(String playerId, int itemTemplateId, Map<String, Object> attributes);

    /**
     * 指定栏位是否需要识别属性
     */
    List<ItemInstance> needGather(String playerId, SlotType slotType);

    /**
     * 切换栏位中道具
     */
    boolean handOff(String playerId,SlotType slotType1,SlotType SlotType2);

    /**
     * 移动道具到指定槽位
     */
    boolean moveItem(String playerId, int instanceId, int targetSlotId);

    /**
     * 更新实例
     */
    boolean updateItem(String playerId,ItemInstance instance);

    /**
     * 批量更新道具实例
     * @param playerId 玩家ID
     * @param instances 要更新的道具实例列表
     * @return 是否全部更新成功
     */
    boolean updateItems(String playerId, List<ItemInstance> instances);


    /**
     * 同步槽位道具
     * @param playerId 玩家ID
     * @param slotItems 槽位期望的道具配置(name和stack，按槽位顺序，可为null)
     * @param slotType 槽位类型
     * @return 所有gather=false的实例（包括新创建的）
     */
    List<ItemInstance> syncSlotItems(String playerId, List<SlotItem> slotItems, SlotType slotType);

    List<ItemSlot> getItemSlots(String playerId, List<ItemInstance> instances);

}
